13. Set 和 Get 函数

Set 和 Get 函数声明

对象不能直接访问私有变量,但借助于 Set 和 Get 函数,你的对象可以访问私有变量。本课前面的 Gaussian 对象展示了具体实现方法。

以下是 set 和 get 函数的声明:

class Gaussian
{
    private:
        ...

    public:
        ...

        void setMu(float);
        void setSigma2(float);

        float getMu();
        float getSigma2();

     ....
};

这里是函数定义:

void Gaussian::setMu (float average) {
    mu = average;
}

void Gaussian::setSigma2 (float sigma) {
    sigma2 = sigma;
}


float Gaussian::getMu () {
    return mu;
}

float Gaussian::getSigma2() {
    return sigma2;
}

定义 set 或 get 函数的语法与其他类函数(除构造函数外)相同:

return datatype Classname::functionname() {
        code to define the function;
}

实际上,get 和 set 函数是一种约定,而不是具有特殊语法的特殊函数。传统上,虽然没有明确要求,但我们将这些函数命名为 getVariablename() 和 setVariablename()。

你需要将 set 和 get 函数声明为公共的,这样对象就可以访问这些函数了。

矩阵类的 set 和 get 函数

继续编写你的矩阵类代码。
*使用 set 函数来修改 grid 变量。
*所有三个私有变量(gird、rows、cols)都应该有函数。

Start Quiz:

#include <iostream>
#include <vector>
#include "matrix.h"

int main () {
    
    // TODO: Nothing to do here
    
    return 0;
}
#include "matrix.h"

Matrix::Matrix() {
    std::vector <std:: vector <float> > initial_grid (10, std::vector <float>(5, 0.5));
    grid = initial_grid;
    rows = initial_grid.size();
    cols = initial_grid[0].size();

}

Matrix::Matrix(std::vector <std:: vector <float> > initial_grid) {
    grid = initial_grid;
    rows = initial_grid.size();
    cols = initial_grid[0].size();
}

/*
** TODO: Define a function setGrid()
**   INPUTS: a 2-D vector
**   OUPUTS: void
**
**   This function receives a 2-D vector reprenting a matrix, and then
**    updates the grid, rows, and cols variables
**
*/

/*
** TODO: Define getGrid(), getRows(), and getCols() functions.
**    INPUTS: None of these functions have inputs
**    OUPUTS: Each function should return its respective variable
**            For example, getRows returns the rows variable
*/
#include <vector>

class Matrix 
{

        private:

            std::vector< std::vector<float> > grid;
            std::vector<float>::size_type rows;
            std::vector<float>::size_type cols;

        public:

            // constructor function declarations
            Matrix ();
            Matrix (std::vector< std::vector<float> >);
            
            
            
            /* TODO: Declare the setGrid(), getGrid(), getRows(), 
            **       and getCols() functions. 
            **
            **  Here are the inputs and outputs of each function:
            **  setGrid()
            **  INPUTS: 2D vector
            **  OUPUTS: void
            **
            **  getGrid()
            **  INPUTS: void
            **  OUPUTS: 2D vector
            **
            **  getRows()
            **  INPUTS: void
            **  OUTPUTS: std::vector<float>::size_type
            **
            **  getCols()
            **  INPUTS: void
            **  OUPUTS: std::vector<float>::size_type
            */
};

matrix.h 参考答案

# include <vector>

class Matrix
{
    private:

        std::vector< std::vector<float> > grid;
        std::vector<int>::size_type rows;
        std::vector<int>::size_type cols;

    public:

        //构造函数
        Matrix ();
        Matrix (std::vector< std::vector<float> >);

        // set functions
        void setGrid(std::vector< std::vector<float> >);

        // get functions
        std::vector< std::vector<float> > getGrid();
        std::vector<int>::size_type getRows();
        std::vector<int>::size_type getCols();

matrix.cpp 参考答案

# include "matrix.h"

Matrix::Matrix() {
    std::vector <std:: vector <float> > initial_grid (10, std::vector <float>(5, 0.5));
    grid = initial_grid;
    rows = initial_grid.size();
    cols = initial_grid[0].size();

}

Matrix::Matrix(std::vector <std:: vector <float> > initial_grid) {
    grid = initial_grid;
    rows = initial_grid.size();
    cols = initial_grid[0].size();
}


void Matrix::setGrid(std::vector< std::vector<float> > new_grid) {
    grid = new_grid;
    rows = new_grid.size();
    cols = new_grid[0].size();
}

std::vector< std::vector<float> > Matrix::getGrid() {
    return grid;
}

std::vector<int>::size_type Matrix::getRows() {
    return rows;
}

std::vector<int>::size_type Matrix::getCols() {
    return cols;
}